package com.tang.util;

import org.springframework.util.ObjectUtils;
import org.springframework.util.StringUtils;

import java.math.BigDecimal;

/**
 * BigDecimal计算工具类
 *
 * @author 唐义斐
 * @date 2018/6/25
 */
public class BigDecimalUtil {

    /**
     * 传的对象不存在则默认值为0
     *
     * @param obj
     * @return
     */
    public static BigDecimal defaultZero(Object obj) {
        if (ObjectUtils.isEmpty(obj))
            return new BigDecimal(0);
        return new BigDecimal(String.valueOf(obj));
    }

    /**
     * 计算两个数相加
     *
     * @param s1
     * @param s2
     * @return
     */
    public static BigDecimal add(String s1, String s2) {
        BigDecimal b1 = StringUtils.isEmpty(s1) ? new BigDecimal(0) : new BigDecimal(s1);
        BigDecimal b2 = StringUtils.isEmpty(s2) ? new BigDecimal(0) : new BigDecimal(s2);
        return b1.add(b2);
    }

    public static BigDecimal add(BigDecimal bigDecimal, String s2) {
        BigDecimal b1 = bigDecimal == null ? new BigDecimal(0) : bigDecimal;
        BigDecimal b2 = StringUtils.isEmpty(s2) ? new BigDecimal(0) : new BigDecimal(s2);
        return b1.add(b2);
    }

    /**
     * 计算两个数相加并且保留两位小数
     *
     * @param s1
     * @param s2
     * @return
     */
    public static String addReturnString(String s1, String s2) {
        return retainTwoDecimal(add(s1, s2)).toString();
    }

    /**
     * 计算两个数相减
     *
     * @param s1
     * @param s2
     * @return
     */
    public static BigDecimal subtract(String s1, String s2) {
        BigDecimal b1 = StringUtils.isEmpty(s1) ? new BigDecimal(0) : new BigDecimal(s1);
        BigDecimal b2 = StringUtils.isEmpty(s2) ? new BigDecimal(0) : new BigDecimal(s2);
        return b1.subtract(b2);
    }

    /**
     * 计算两个数相减并且保留两位小数
     *
     * @param s1
     * @param s2
     * @return
     */
    public static String subtractReturnString(String s1, String s2) {
        return retainTwoDecimal(subtract(s1, s2)).toString();
    }

    /**
     * 对BigDecimal四舍五入保留两位小数
     *
     * @param bigDecimal
     * @return
     */
    public static BigDecimal retainTwoDecimal(BigDecimal bigDecimal) {
        if (bigDecimal != null)
            return bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP);
        return null;
    }

    /**
     * 人民币与各国其他货币之间的转换（参考http://www.debugease.com/j2se/289065.html）
     *
     * @param exchangeRate 汇率值
     * @param money 货币金额
     * @return 转化后人民币的金额
     */
    public static BigDecimal rmbTransferOtherDollar(String exchangeRate, String money) {
        if(!StringUtils.isEmpty(exchangeRate) && !StringUtils.isEmpty(money))
            return new BigDecimal(exchangeRate).divide(new BigDecimal(100)).multiply(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_UP);
        return null;
    }

    /**
     * 人民币与各国其他货币之间的转换（参考http://www.debugease.com/j2se/289065.html）
     *
     * @param exchangeRate 汇率值
     * @param money 人民币金额
     * @return 转化后其他货币金额
     */
    public static BigDecimal otherDollarTransferRmb(String exchangeRate, String money) {
        if(!StringUtils.isEmpty(exchangeRate) && !StringUtils.isEmpty(money)){
            BigDecimal b1 = new BigDecimal(exchangeRate).divide(new BigDecimal(100));
            return new BigDecimal(money).divide(b1).setScale(2, BigDecimal.ROUND_HALF_UP);
        }
        return null;
    }

}
